// 1. Promist 是一个 构造函数，既然是构造函数，那么我们就可以 new Promise() 得到一个 Promise() 的实例
// 2. 在 Promise 上， 有两个函数，分别是 resolve（成功之后的回调） 和 reject （失败之后的回调）
// 3. 在 Promise 构造函数的Prototy 属性上，有一个 .then() 方法， 也就是说，只要是 Promise 构造函数创建出来的实例，都可以 访问到 .then() 方法
// 4. Promise 表示一个异步操作，每当我们 new 一个 Promise 的实例，这个实例，就表示一个具体的异步操作
// 5. 既然 Promise 创建的实例，是一个异步操作，那么 这个异步操作的结果，只能有两种状态：
//  5.1 状态1： 异步执行成功了，需要在内部调用成功的回调函数 resolve 把结返回给调用者
//  5.2 状态2 ： 异步执行失败了， 需要在内部调用 失败的回调函数 reject 把结果返回给调用者
//  5.3 由于 Promise的实例是一个异步操作，所以，内部拿到操作结果后，无法使用 return 把结果返回给调用者，这个时候，只能通过回调函数的形式，来把 成功或 失败的结果 返回给调用者
// 6. 我们可以在 new 出来的 Promise 实例上，调用 .then() 方法，【预先】为这个 Promise 异步操作，指定成功(resolve) 和 失败(reject) 回调函数

// 注意： 这里 new 出来的 promise ， 只是代表 【形式上】 的异步操作
// 什么是形式上的异步操作: 就是说，我们只知道他是一个异步的操作，但是做什么具体的异步事情，目前还不知道，
// var promise = new Promise();

// 这是一个具体的异步操作，其中 function 指定一个具体的异步操作
// var promise = new Promise(function () {
  // 这个 function 内部写的就是具体的异步操作
// })

var fs = require('fs');
function getFileByPath(pathStr) {
  var promise = new Promise(function (resolve, reject) {
    fs.readFile(pathStr, 'utf-8', (err, data) => {
      if (err) return reject(err);
      resolve(data)
    })
  })
  return promise;
}

var p = getFileByPath('./1.txt');
p.then(function (data) {
  console.log(data)
}, function (err) {
    console.log(err.message)
})
